package cn.jeefast.resthz.webservice.entity;

import com.wondersgroup.cuteinfo.client.util.GUIDUtil;
import javax.validation.constraints.Pattern;
import lombok.Data;
import lombok.Getter;
import lombok.Setter;
import org.hibernate.validator.constraints.Length;
import org.hibernate.validator.constraints.NotEmpty;

/**
 * CarFreeCarrier 	无车承运人电子路单
 *
 * @author WY
 * @date 2018/9/23 0023
 */
//@Data
@Getter
@Setter
public class CarFreeCarrier {

  public String getMessageReferenceNumber() {
    return GUIDUtil.generateID();
  }

  /**
   * 报文的唯一标识符，由系统按GUID规则自动产生
   */
  private String messageReferenceNumber;
  /**
   * 无车承运人电子路单
   */
  @NotEmpty(message = "无车承运人电子路单documentName不能为空!")
  @Length(min = 1, max = 35, message = "无车承运人电子路单length长度在[1,35]之间")
  private String documentName;
  /**
   * 报文版本号
   */
  @NotEmpty(message = "报文版本号documentVersionNumber不能为空!")
  @Length(min = 1, max = 17, message = "报文版本号length长度在[1,17]之间")
  private String documentVersionNumber;
  /**
   * 无车承运人物流交换代码
   */
  @NotEmpty(message = "无车承运人物流交换代码senderCode不能为空!")
  @Length(min = 1, max = 20, message = "无车承运人物流交换代码length长度在[1,20]之间")
  private String senderCode;
  /**
   * 监测平台代码
   */
  @NotEmpty(message = "监测平台代码recipientCode不能为空!")
  @Length(min = 1, max = 20, message = "监测平台代码length长度在[1,20]之间")
  private String recipientCode;
  /**
   * 发送日期时间 YYYYMMDDhhmmss
   */
  @NotEmpty(message = "发送日期时间messageSendingDateTime不能为空!")
  @Pattern(regexp = "^[0-9]{14}$", message = "messageSendingDateTime必须是数字，长度只能等于14位")
  private String messageSendingDateTime;
  /**
   *报文功能代码 默认9
   */
  @NotEmpty(message = "报文功能代码messageFunctionCode不能为空!")
  @Length(min = 1, max = 3, message = "报文功能代码length长度在[1,3]之间")
  private String messageFunctionCode;
  /**
   * 货主端发货时生成的单号
   */
  @NotEmpty(message = "货主端发货时生成的单号originalDocumentNumber不能为空!")
  @Length(min = 1, max = 35, message = "货主端发货时生成的单号length长度在[1,35]之间")
  private String originalDocumentNumber;
  /**
   * 司机端接单时生成的运单号
   */
  @NotEmpty(message = "司机端接单时生成的运单号shippingNoteNumber不能为空!")
  @Length(min = 1, max = 20, message = "司机端接单时生成的运单号length长度在[1,20]之间")
  private String shippingNoteNumber;
  /**
   * 无车承运试点企业名称
   */
  @NotEmpty(message = "无车承运试点企业名称carrier不能为空!")
  @Length(min = 1, max = 512, message = "无车承运试点企业名称length长度在[1,512]之间")
  private String carrier;
  /**
   * 无车承运人的统一社会信用代码
   */
  @NotEmpty(message = "无车承运人的统一社会信用代码unifiedSocialCreditIdentifier不能为空!")
  @Length(min = 1, max = 18, message = "无车承运人的统一社会信用代码length长度在[1,18]之间")
  private String unifiedSocialCreditIdentifier;
  /**
   * 无车承运人的道路运输经营许可证
   */
  @Length(min = 1, max = 50, message = "无车承运人的道路运输经营许可证length长度在[1,50]之间")
  private String cPermitNumber;
  /**
   * 无车承运人系统正式生成运单的日期时间（司机接单时间）
   */
  @NotEmpty(message = "无车承运人系统正式生成运单的日期时间consignmentDateTime不能为空!")
  @Pattern(regexp = "^[0-9]{14}$", message = "consignmentDateTime必须是数字，长度只能等于14位")
  private String consignmentDateTime;
  /**
   * 业务类型代码 （1002996	干线普货运输）
   */
  @NotEmpty(message = "业务类型代码businessTypeCode不能为空!")
  @Length(min = 1, max = 7, message = "业务类型代码length长度在[1,7]之间")
  private String businessTypeCode;
  /**
   * 货物装车后的发车时间
   */
  @NotEmpty(message = "货物装车后的发车时间despatchActualDateTime不能为空!")
  @Pattern(regexp = "^[0-9]{14}$", message = "despatchActualDateTime必须是数字，长度只能等于14位")
  private String despatchActualDateTime;
  /**
   * 货物运到后的签收时间。
   * 如签收时间无法确定，填货物运到收货地的时间
   */
  @NotEmpty(message = "收货日期时间goodsReceiptDateTime不能为空!")
  @Pattern(regexp = "^[0-9]{14}$", message = "goodsReceiptDateTime必须是数字,length只能等于14位")
  private String goodsReceiptDateTime;

  //ConsignorInfo 发货方信息
  /**
   * 货主
   */
  @Length(min = 1, max = 512, message = "货主length长度在[1,512]之间")
  private String consignor;
  /**
   * 发货人证件号
   */
  @Length(min = 1, max = 35, message = "发货人证件号length长度在[1,35]之间")
  private String personalIdentityDocument;
  /**
   * 实际装货的地点
   */
  @Length(min = 1, max = 256, message = "实际装货的地点length长度在[1,256]之间")
  private String placeOfLoading;
  /**
   * 装货地点的国家行政区划代码
   */
  @NotEmpty(message = "装货地点的国家行政区划代码cCountrySubdivisionCode不能为空!")
  @Length(min = 1, max = 12, message = "装货地点的国家行政区划代码length长度在[1,12]之间")
  private String cCountrySubdivisionCode;

  //ConsigneeInfo 收货方信息
  /**
   * 收货人
   */
  @Length(min = 1, max = 512, message = "收货人length长度在[1,512]之间")
  private String consignee;
  /**
   * 收货地点
   */
  @Length(min = 1, max = 256, message = "收货地点length长度在[1,256]之间")
  private String goodsReceiptPlace;
  /**
   * 收货地点的国家行政区划代码
   */
  @NotEmpty(message = "收货地点的国家行政区划代码dCountrySubdivisionCode不能为空!")
  @Length(min = 1, max = 12, message = "收货地点的国家行政区划代码length长度在[1,12]之间")
  private String dCountrySubdivisionCode;
  //PriceInfo 费用信息
  /**
   * 货币总金额(货币单位为人民币，保留3位小数，如整数的话，以.000填充)
   */
  @NotEmpty(message = "货币总金额totalMonetaryAmount不能为空!")
  @Pattern(regexp = "^[0-9]{1,15}\\.[0-9]{3}$", message = "totalMonetaryAmount必须是保留3位小数的数字，长度为1-18位，小数点不计入总长")
  private String totalMonetaryAmount;
  /**
   * 备注（人民币）
   */
  @Length(min = 1, max = 256, message = "备注length长度在[1,256]之间")
  private String remark;

  //VehicleInfo 车辆信息
  /**
   * 牌照类型代码
   */
  @NotEmpty(message = "牌照类型代码licensePlateTypeCode不能为空!")
  @Length(min = 1, max = 20, message = "牌照类型代码length长度在[1,20]之间")
  private String licensePlateTypeCode;
  /**
   * 车辆牌照号
   */
  @NotEmpty(message = "车辆牌照号vehicleNumber不能为空!")
  @Length(min = 1, max = 35, message = "车辆牌照号length长度在[1,35]之间")
  private String vehicleNumber;
  /**
   * 车辆分类代码
   */
  @NotEmpty(message = "车辆分类代码vehicleClassificationCode不能为空!")
  @Length(min = 1, max = 12, message = "车辆分类代码length长度在[1,12]之间")
  private String vehicleClassificationCode;
  /**
   * 车辆载质量 （默认单位：吨，保留两位小数）
   */
  @NotEmpty(message = "车辆载质量vehicleTonnage不能为空!")
  @Pattern(regexp = "^[0-9]{1,7}\\.[0-9]{2}$", message = "vehicleTonnage必须是保留2位小数的数字，长度为1-9位，小数点不计入总长")
  private String vehicleTonnage;
  /**
   * 道路运输证证件编号
   */
  @NotEmpty(message = "道路运输证证件编号roadTransportCertificateNumber不能为空!")
  @Pattern(regexp = "^[0-9]{5,15}$", message = "roadTransportCertificateNumber必须是数字，长度为15位")
  private String roadTransportCertificateNumber;
  /**
   * 挂车牌照号
   */
  @Length(min = 1, max = 35, message = "挂车牌照号length长度在[1,35]之间")
  private String trailerVehiclePlateNumber;
  /**
   * 车辆所有者（或企业）的名称或姓名
   */
  @Length(min = 1, max = 256, message = "车辆所有者（或企业）的名称或姓名length长度在[1,256]之间")
  private String owner;
  /**
   * 车辆所属业户的道路运输经营许可证编号
   */
  @Length(min = 1, max = 50, message = "车辆所属业户的道路运输经营许可证编号length长度在[1,50]之间")
  private String dPermitNumber;

  //Driver 驾驶员
  /**
   * 驾驶员姓名
   */
  @NotEmpty(message = "驾驶员姓名nameOfPerson不能为空!")
  @Length(min = 1, max = 30, message = "驾驶员姓名length长度在[1,30]之间")
  private String nameOfPerson;
  /**
   * 驾驶员从业资格证号
   */
  @Length(min = 1, max = 19, message = "驾驶员从业资格证号length长度在[1,19]之间")
  private String qualificationCertificateNumber;
  /**
   * 电话号码
   */
  @Length(min = 1, max = 18, message = "电话号码length长度在[1,18]之间")
  private String telephoneNumber;

  //货物信息（如一车货有不同货物，则可循环）
  /**
   * 货物名称
   */
  @NotEmpty(message = "货物名称descriptionOfGoods不能为空!")
  @Length(min = 1, max = 512, message = "货物名称length长度在[1,512]之间")
  private String descriptionOfGoods;
  /**
   * 货物类型分类代码
   */
  @NotEmpty(message = "货物类型分类代码cargoTypeClassificationCode不能为空!")
  @Length(min = 1, max = 3, message = "货物类型分类代码length长度在[1,3]之间")
  private String cargoTypeClassificationCode;
  /**
   * 货物项毛重（重量单位以KGM千克填写数值，保留3位小数，如整数的话，以.000填充。小数点不计入总长）
   */
  @NotEmpty(message = "货物项毛重goodsItemGrossWeight不能为空!")
  @Pattern(regexp = "^[0-9]{1,11}\\.[0-9]{3}$", message = "goodsItemGrossWeight必须是保留3位小数的数字，长度为1-14位，小数点不计入总长")
  private String goodsItemGrossWeight;
  /**
   * 体积单位以DMQ立方米填写数值，保留4位小数，如整数的话，以.0000填充。小数点不计入总长
   */
  @NotEmpty(message = "体积单位cube不能为空!")
  @Pattern(regexp = "^[0-9]{1,5}\\.[0-9]{4}$", message = "cube必须是保留4位小数的数字，长度为1-9位，小数点不计入总长")
  private String cube;
  /**
   * 总件数
   */
  @NotEmpty(message = "总件数totalNumberOfPackages不能为空!")
  @Pattern(regexp = "^[0-9]{1,8}$", message = "totalNumberOfPackages必须是数字，长度为1-8位")
  private String totalNumberOfPackages;
  /**
   * 自由文本
   */
  @Length(min = 1, max = 512, message = "自由文本length长度在[1,512]之间")
  private String freeText;
}
